package com.nidu.demo.oauth2.dto;

import com.nidu.demo.base.BaseCmd;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotEmpty;
import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "Oauth2授权令牌请求对象")
public class OAuth2GrantCmd extends BaseCmd {

    /**
     * 授权类型
     * 1. authorization_code：授权码模式
     * 2. password：密码模式
     * 3. client_credentials：客户端模式
     * 4. refresh_token：刷新令牌
     */
    @NotEmpty(message = "grant_type 不能为空")
    private String grantType;

    /**
     * 客户端编码
     */
    @NotEmpty(message = "client_code 不能为空")
    private String clientCode;

    /**
     * 客户端密钥
     */
    @NotEmpty(message = "client_secret 不能为空")
    private String clientSecret;

    // ========== 授权码模式 ==========
    /**
     * 授权码
     */
    private String code;

    /**
     * 重定向URI
     */
    private String redirectUri;

    // ========== 密码模式 ==========
    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    // ========== 刷新令牌 ==========
    /**
     * 刷新令牌
     */
    private String refreshToken;

    /**
     * 授权范围
     */
    private List<String> scopes;
}